from linkeddataquery import *
#Declare the DBPedia endpoint
endpoint="http://dbpedia.org/sparql"
sparql = SPARQLWrapper(endpoint)
# Define any prefixes
prefix = '''
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbc: <http://dbpedia.org/resource/Category:>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX ouseful:<http://ouseful.info/>
'''
q='''
prefix gephi:<http://gephi.org/>
prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
CONSTRUCT{
?genreA gephi:label ?genreAname .
?genreB gephi:label ?genreBname .
?genreA gephi:related ?genreB .
?genreB gephi:related ?genreA .
?band foaf:name ?bandname .
} WHERE {
?band a <http://schema.org/MusicGroup>.
?band rdfs:label ?bandname .
?band foaf:name "Black Sabbath"@en .
?band <http://dbpedia.org/ontology/background> "group_or_band".
?band <http://dbpedia.org/ontology/genre> ?genreA.
?band <http://dbpedia.org/ontology/genre> ?genreB.
?genreA rdfs:label ?genreAname.
?genreB rdfs:label ?genreBname.
} limit 10 offset 0
'''
df = dfResults(endpoint, prefix, q)
df
s | p | o | |
---|---|---|---|
0 | http://dbpedia.org/resource/Heavy_metal_music | http://gephi.org/label | Heavy metal music |
1 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | ブラック・サバス |
2 | http://dbpedia.org/resource/Heavy_metal_music | http://gephi.org/related | http://dbpedia.org/resource/Heavy_metal_music |
3 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
4 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
5 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
6 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
7 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
8 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
9 | http://dbpedia.org/resource/Heavy_metal_music | http://gephi.org/label | Heavy metal |
10 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
11 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | Black Sabbath |
12 | http://dbpedia.org/resource/Black_Sabbath | http://xmlns.com/foaf/0.1/name | بلاك سابث |
q='''
CONSTRUCT{
?philosopher ouseful:label ?philosopherName .
?influence ouseful:label ?influenceName .
?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence
} WHERE {
?philosopher a
<http://dbpedia.org/ontology/Philosopher> .
?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence.
?philosopher foaf:name ?philosopherName.
?influence foaf:name ?influenceName.
} LIMIT 1
'''
dfResults(endpoint, prefix, q)
s | p | o | |
---|---|---|---|
0 | http://dbpedia.org/resource/Willard_Van_Orman_... | http://ouseful.info/label | Willard Van Orman Quine |
1 | http://dbpedia.org/resource/Alfred_North_White... | http://ouseful.info/label | Alfred North Whitehead |
2 | http://dbpedia.org/resource/Willard_Van_Orman_... | http://dbpedia.org/ontology/influencedBy | http://dbpedia.org/resource/Alfred_North_White... |
q='''
CONSTRUCT{
?genreA ouseful:label ?genreAname .
?genreB ouseful:label ?genreBname .
?genreA ouseful:related ?genreB .
?genreB ouseful:related ?genreA .
} WHERE {
?band a <http://schema.org/MusicGroup>.
?band <http://dbpedia.org/ontology/background> "group_or_band".
?band <http://dbpedia.org/ontology/genre> ?genreA.
?band <http://dbpedia.org/ontology/genre> ?genreB.
?genreA rdfs:label ?genreAname.
?genreB rdfs:label ?genreBname.
FILTER(?genreA != ?genreB && langMatches(lang(?genreAname), "en") && langMatches(lang(?genreBname), "en"))
} limit 100 offset 0
'''
dfResults(endpoint, prefix, q)
s | p | o | |
---|---|---|---|
0 | http://dbpedia.org/resource/Folk_rock | http://ouseful.info/related | http://dbpedia.org/resource/Psychedelic_pop |
1 | http://dbpedia.org/resource/Pop_music | http://ouseful.info/label | Pop music |
2 | http://dbpedia.org/resource/British_rhythm_and... | http://ouseful.info/related | http://dbpedia.org/resource/Blues_rock |
3 | http://dbpedia.org/resource/Progressive_rock | http://ouseful.info/related | http://dbpedia.org/resource/Progressive_death_... |
4 | http://dbpedia.org/resource/Experimental_rock | http://ouseful.info/related | http://dbpedia.org/resource/Art_rock |
... | ... | ... | ... |
184 | http://dbpedia.org/resource/Hard_rock | http://ouseful.info/related | http://dbpedia.org/resource/Progressive_rock |
185 | http://dbpedia.org/resource/Polka | http://ouseful.info/related | http://dbpedia.org/resource/Latin_Alternative |
186 | http://dbpedia.org/resource/Pop_rock | http://ouseful.info/related | http://dbpedia.org/resource/Progressive_rock |
187 | http://dbpedia.org/resource/Avant-garde_music | http://ouseful.info/label | Avant-garde music |
188 | http://dbpedia.org/resource/Pop_rock | http://ouseful.info/related | http://dbpedia.org/resource/Art_rock |
189 rows × 3 columns
#subjects
q='''
SELECT DISTINCT ?subgenre
WHERE {
?_subgenre dct:subject dbc:Heavy_metal_genres .
?_subgenre rdfs:label ?subgenre .
FILTER(langMatches(lang(?subgenre), "en"))
}
'''
dfResults(endpoint, prefix, q)
subgenre | |
---|---|
0 | Speed metal |
1 | Pagan metal |
2 | Death 'n' roll |
3 | Nintendocore |
4 | Power metal |
5 | Doom metal |
6 | Funk metal |
7 | Crossover thrash |
8 | Thrash metal |
9 | Visual kei |
10 | Industrial metal |
11 | Metalcore |
12 | Black metal |
13 | Death metal |
14 | Grindcore |
15 | Nu metal |
16 | Sludge metal |
17 | Traditional heavy metal |
18 | Bay Area thrash metal |
19 | Djent |
20 | Blackgaze |
21 | Extreme metal |
22 | Deathgrind |
23 | Dark metal |
24 | Drone metal |
25 | Goregrind |
26 | Melodic death metal |
27 | Neoclassical metal |
28 | Celtic metal |
29 | Folk metal |
30 | Medieval metal |
31 | Progressive metal |
32 | Viking metal |
33 | Heavy metal genres |
34 | Pornogrind |
35 | Alternative metal |
36 | Digital hardcore |
37 | Glam metal |
38 | Latin metal |
39 | Electronicore |
40 | Symphonic black metal |
41 | Rap metal |
42 | Unblack metal |
43 | Post-metal |
44 | Cyber metal |
45 | Nagoya kei |
46 | Groove metal |
47 | Neue Deutsche Härte |
48 | Christian metal |
49 | Avant-garde metal |
50 | Gothic metal |
51 | Symphonic metal |
52 | Melodic metalcore |
53 | Kawaii metal |
54 | Stoner rock |
55 | Pirate metal |
#Concepts
q='''
SELECT DISTINCT ?subgenre
WHERE {
?_subgenre skos:broader dbc:Heavy_metal_genres .
?_subgenre rdfs:label ?subgenre .
}
'''
df1 = dfResults(endpoint, prefix, q)
df1
subgenre | |
---|---|
0 | Speed metal |
1 | Christian metal |
2 | Metalcore |
3 | Progressive metal |
4 | Alternative metal |
5 | Doom metal |
6 | Heavy metal musical groups by genre |
7 | Post-metal |
8 | Power metal |
9 | Symphonic metal |
10 | Groove metal |
11 | Melodic death metal |
12 | Glam metal |
13 | Heavy metal songs by genre |
14 | Black metal |
15 | Death metal |
16 | Extreme metal |
17 | Grindcore |
18 | Nu metal |
19 | Nintendocore |
20 | Thrash metal |
21 | Viking metal |
22 | Djent |
23 | Blackened death metal |
24 | Funk metal |
25 | Heavy metal musicians by genre |
26 | Sludge metal |
27 | Rap metal |
28 | Folk metal |
29 | Gothic metal |
30 | Avant-garde metal |
31 | Industrial metal |
32 | Stoner rock |
33 | Heavy metal albums by genre |
#Concepts
q='''
SELECT DISTINCT ?subgenre
WHERE {
?_subgenre skos:broader dbc:Heavy_metal_genres .
?_subgenre rdfs:label ?subgenre .
}
'''
dfResults(endpoint, prefix, q)
subgenre | |
---|---|
0 | Speed metal |
1 | Christian metal |
2 | Metalcore |
3 | Progressive metal |
4 | Alternative metal |
5 | Doom metal |
6 | Heavy metal musical groups by genre |
7 | Post-metal |
8 | Power metal |
9 | Symphonic metal |
10 | Groove metal |
11 | Melodic death metal |
12 | Glam metal |
13 | Heavy metal songs by genre |
14 | Black metal |
15 | Death metal |
16 | Extreme metal |
17 | Grindcore |
18 | Nu metal |
19 | Nintendocore |
20 | Thrash metal |
21 | Viking metal |
22 | Djent |
23 | Blackened death metal |
24 | Funk metal |
25 | Heavy metal musicians by genre |
26 | Sludge metal |
27 | Rap metal |
28 | Folk metal |
29 | Gothic metal |
30 | Avant-garde metal |
31 | Industrial metal |
32 | Stoner rock |
33 | Heavy metal albums by genre |
dfResults(endpoint, prefix, q)
subgenre | |
---|---|
0 | Speed metal |
1 | Power metal |
2 | Doom metal |
3 | Thrash metal |
4 | Black metal |
5 | Death metal |
6 | Traditional heavy metal |
7 | Extreme metal |
8 | Glam metal |
9 | Groove metal |
10 | Avant-garde metal |
q='''
SELECT DISTINCT ?subgenre ?styled
WHERE {
dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .
?_subgenre foaf:name ?subgenre .
OPTIONAL {
?_subgenre dbo:stylisticOrigin ?_styled .
?_styled foaf:name ?styled
}
}
'''
dfResults(endpoint, prefix, q)
subgenre | styled | |
---|---|---|
0 | Avant-garde metal | Progressive rock |
1 | Thrash metal | Speed metal |
2 | Power metal | Speed metal |
3 | Traditional heavy metal | Blues rock |
4 | Black metal | Thrash metal |
5 | Groove metal | Thrash metal |
6 | Death metal | Thrash metal |
7 | Glam metal | Hard rock |
8 | Death metal | Black metal |
9 | Groove metal | Death metal |
10 | Black metal | Death metal |
11 | Avant-garde metal | Heavy metal |
12 | Doom metal | Heavy metal |
13 | Speed metal | Heavy metal |
14 | Glam metal | Heavy metal |
15 | Groove metal | Heavy metal |
16 | Extreme metal | Heavy metal |
17 | Glam metal | Pop music |
18 | Traditional heavy metal | Psychedelic rock |
19 | Glam metal | Punk rock |
20 | Avant-garde metal | Extreme metal |
21 | Power metal | Neoclassical metal |
22 | Glam metal | Glam rock |
23 | Death metal | Hardcore punk |
24 | Groove metal | Hardcore punk |
25 | Speed metal | Hardcore punk |
26 | Black metal | Hardcore punk |
27 | Thrash metal | Hardcore punk |
28 | Power metal | New wave of British heavy metal |
29 | Thrash metal | New wave of British heavy metal |
#style
q='''
SELECT DISTINCT ?styled
WHERE {
?_styled dbo:stylisticOrigin dbr:Heavy_metal_music .
?_styled foaf:name ?styled .
}
'''
dfResults(endpoint, prefix, q)
styled | |
---|---|
0 | Grunge |
1 | Speed metal |
2 | Death 'n' roll |
3 | Nintendocore |
4 | Doom metal |
5 | Funk metal |
6 | Visual kei |
7 | Industrial metal |
8 | Nu metal |
9 | Armenian Rock |
10 | African heavy metal |
11 | Ukrainian metal |
12 | Extreme metal |
13 | Manguebeat |
14 | Folk metal |
15 | Progressive metal |
16 | Horror punk |
17 | Desert rock |
18 | Dark rock |
19 | Alternative metal |
20 | Glam metal |
21 | New wave of British heavy metal |
22 | Latin metal |
23 | Rap metal |
24 | Post-metal |
25 | Groove metal |
26 | Christian metal |
27 | Avant-garde metal |
28 | Gothic metal |
29 | Kawaii Metal |
30 | Shock rock |
31 | Stoner rock |
q='''
SELECT DISTINCT ?subgenre
WHERE {
{
dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .
?_subgenre foaf:name ?subgenre
} UNION {
dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .
?_subgenre foaf:name ?subgenre
}
UNION {
dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .
?_subgenre dbo:musicSubgenre ?__subgenre .
?__subgenre foaf:name ?subgenre
FILTER (?__subgenre != ?_subgenre )
}
FILTER ( (?__subgenre != ?_subgenre) )
}
'''
dfResults(endpoint, prefix, q)
subgenre | |
---|---|
0 | Speed metal |
1 | Doom metal |
2 | Thrash metal |
3 | Black metal |
4 | Death metal |
5 | Technical death metal |
6 | Melodic death metal |
7 | Symphonic black metal |
dbo:musicFusionGenre
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-54-5692fa57dc44> in <module> ----> 1 dbo:musicFusionGenre NameError: name 'musicFusionGenre' is not defined
#Bands - simple in genre
#dbr:Heavy_metal_music
q='''
SELECT ?bandname ?genrename
WHERE {
?band dbo:genre dbr:Heavy_metal_music .
?band dbo:genre ?genre.
?band dbo:background "group_or_band" .
?band rdfs:label ?bandname .
?genre rdfs:label ?genrename .
FILTER (langMatches(lang(?bandname), "en") && ?genre != dbr:Heavy_metal_music &&
langMatches(lang(?genrename), "en") )
}
'''
df = dfResults(endpoint, prefix, q)
df
bandname | genrename | |
---|---|---|
0 | Tang Dynasty (band) | Art rock |
1 | Alice in Chains | Grunge |
2 | Soundgarden | Grunge |
3 | Wolfgang (band) | Grunge |
4 | Deep Purple | Progressive rock |
... | ... | ... |
2583 | Vista Chino | Stoner rock |
2584 | Thumlock | Stoner rock |
2585 | Dia de los Muertos (band) | Death Metal |
2586 | Claim the Throne | Melodic Death |
2587 | Signum Regis | Melodic metal |
2588 rows × 2 columns
df.to_csv('bands.csv', index=False)
df['genrename'].unique()
array(['Art rock', 'Grunge', 'Progressive rock', 'Speed metal', 'Symphonic rock', 'Blues rock', 'Power metal', 'Psychobilly', 'Southern rock', 'Doom metal', 'Folk rock', 'Funk metal', 'Klezmer', 'Surf rock', 'Post-hardcore', 'Thrash Metal', 'Bossa nova', 'Crossover thrash', 'Thrash metal', 'Thrashcore', 'Hard rock', 'Deathrock', 'Gothic rock', 'Industrial rock', 'Noise rock', 'Boogie rock', 'Industrial metal', 'Metalcore', 'Sludge Metal', 'Hard Rock', 'Black metal', 'Blues', 'Death metal', 'Electronic music', 'Folk music', 'Instrumental', 'Jazz', 'Nu metal', 'Pop music', 'Psychedelic rock', 'Punk rock', 'Reggae', 'Rock and roll', 'Rock music', 'Satire', 'Ska', 'Crust punk', 'Sludge metal', 'Dubstep', 'Experimental rock', 'Post-punk', 'Mathcore', 'Electropunk', 'Gothic Metal', 'Progressive Metal', 'Hardcore Punk', 'Rock Music', 'Classic rock', 'Classical music', 'Melodic death metal', 'Neoclassical metal', 'Surf music', 'Christian rock', 'Folk metal', 'Industrial music', 'Post-rock', 'Progressive metal', 'Horror punk', 'Alternative Rock', 'Speed Metal', 'Mizrahi music', 'Groove Metal', 'Alternative metal', 'Alternative rock', 'Ambient music', 'Breakbeat hardcore', 'Dub music', 'Electronica', 'Glam metal', 'Glam punk', 'Glam rock', 'Hardcore punk', 'Indie rock', 'New wave of British heavy metal', 'Hard rock music', 'Christian Metal', 'Instrumental rock', 'Rap metal', 'Queercore', 'Post-metal', 'Groove metal', 'Garage rock', 'Drum and Bass', 'Rapcore', 'Post-Rock', 'Rock (music)', 'Pinoy rock', 'Christian metal', 'Math rock', 'Hip hop music', 'Pop rock', 'Gothic metal', 'Symphonic metal', 'Comedy rock', 'Deathcore', 'Alternative Metal', 'Punk Rock', 'Melodic metalcore', 'Arena rock', 'Post-grunge', 'Shock rock', 'Stoner rock', 'Death Metal', 'Post-Metal', 'Anison', 'American Rock', 'Stoner metal', 'Electronic rock', 'Neo-classical metal', 'Cowpunk', 'Space rock', 'Power pop', 'Acid rock', 'Parody music', 'Drum and bass', 'Pub rock (Australia)', 'Album-oriented rock', 'Outsider music', 'Viking metal', 'Digital hardcore', 'Funk rock', 'Neue Deutsche Härte', 'Glam Metal', 'Blues-rock', 'Post-progressive', 'Polka', 'Vaudeville', 'Waltz', 'Cajun music', 'Electroacoustic music', 'New-age music', "Death 'n' roll", 'Dance metal', 'Show tunes', 'Oom-pah', 'Crustcore', 'Dominican rock', 'Southern metal', 'Bhangra (music)', 'Country music', 'Grindcore', 'House music', 'Orchestra', 'Ragtime', 'Samba', 'Steampunk', 'Chanson', 'Folk punk', 'Music and politics', "Children's music", 'Middle Eastern music', 'Extreme metal', 'Technical death metal', 'Riot grrrl', 'Music in Japanese animation', 'Rock music of West Bengal', 'Cello metal', 'Drone metal', 'Power Metal', 'Anarcho-punk', 'Chiptune', 'Noise music', 'Soul music', 'J-pop', 'Roots rock', 'Swamp rock', 'Holiday music', 'Metal Core', 'Calypso music', 'Melodic hardcore', "Rock 'n' roll", 'Modern rock', 'Dark cabaret', 'Glitch (music)', 'Tribute act', 'Experimental music', 'Industrial Metal', 'Darkwave', 'Ska punk', 'Melodic Death Metal', 'Kawaii metal', 'Traditional music', 'Comedy', "Black 'n' roll", 'Melodic rock', 'Grunge music', 'Punk metal', 'Melodic metal', 'Experimental metal', 'Rock en Español', 'Americana (music)', 'Pop Rock', 'Shoegazing', 'Jazz rock', 'Dance music', 'Screamo', 'Emo', 'Folk Rock', 'Jam rock', 'Celtic metal', 'Acoustic rock', 'Hardcore metal', 'Latin metal', 'Alternative pop', 'Symphonic Metal', 'D-beat', 'Pop punk', 'Skate punk', 'Heavy Metal music', 'Symphonic power metal', 'NWOAHM', 'Anarcho punk', 'Post metal', 'New wave music', 'Original Pilipino Music', 'Jazz fusion', 'Pirate metal', 'Comedy Rock', 'Post punk', 'Straight edge hardcore', 'Christian alternative rock', 'Traditional heavy metal', 'Metal music', 'Palm Desert Scene', 'Metallic hardcore', 'Stoner Rock', 'Lo-fi music', 'Neo-psychedelia', 'Jewish rock', 'Christian hardcore', 'Cock rock', 'Soundtrack', 'World music', 'Indie Pop', 'Industrial Rock', 'Funk', 'Hip Hop music', 'Mongolian music', 'Electronic body music', 'Indie Rock', 'Cybergrind', 'Rautalanka', 'Krautrock', 'Unblack metal', 'Crossover Music', 'Classical Music', 'Avant-garde metal', 'Pop Music', 'Avant rock', 'Trad metal', 'Straight Edge', 'Coldwave', 'Fusion (music)', 'Slow rock', 'Indie metal', 'Japanese noise rock', 'Parody', 'Nu Metal', 'Dark metal', 'Avante garde', 'Post grunge', 'Video game music', 'Avant-Garde metal', 'Electronic dance music', 'Traditional Irish music', 'Celtic Metal', 'Ska-core', 'Melodic heavy metal', 'Folk Metal', 'Adult-oriented rock', 'Crossover Thrash', 'Celtic rock', 'Death metal music', 'Sleaze rock', 'Christian punk', 'Melodic Death'], dtype=object)